From cce6a603a6aa054d2d5aaaf9b3b0671cb6a9970c Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Sat, 6 Nov 2021 16:17:59 +0100 Subject: [PATCH] label: max-width-chars has no effect on smaller text Having a short text and a large max-width-chars should request the natural width of the text, not the limit from max-width-chars. This caused huge message dialogs. Reftests added. --- gtk/gtklabel.c | 11 ++++------- .../reftests/label-huge-max-width-chars.ref.ui | 11 +++++++++++ testsuite/reftests/label-huge-max-width-chars.ui | 12 ++++++++++++ .../label-wrapped-huge-max-width-chars.ref.ui | 12 ++++++++++++ .../reftests/label-wrapped-huge-max-width-chars.ui | 13 +++++++++++++ testsuite/reftests/meson.build | 4 ++++ 6 files changed, 56 insertions(+), 7 deletions(-) create mode 100644 testsuite/reftests/label-huge-max-width-chars.ref.ui create mode 100644 testsuite/reftests/label-huge-max-width-chars.ui create mode 100644 testsuite/reftests/label-wrapped-huge-max-width-chars.ref.ui create mode 100644 testsuite/reftests/label-wrapped-huge-max-width-chars.ui diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c index 3c3be85406..46af2fb174 100644 --- a/gtk/gtklabel.c +++ b/gtk/gtklabel.c @@ -1077,14 +1077,15 @@ get_static_size (GtkLabel *self, int *minimum_baseline, int *natural_baseline) { + int minimum_default, natural_default; PangoLayout *layout; - layout = gtk_label_get_measuring_layout (self, NULL, -1); + get_default_widths (self, &minimum_default, &natural_default); + + layout = gtk_label_get_measuring_layout (self, NULL, natural_default); if (orientation == GTK_ORIENTATION_HORIZONTAL) { - int minimum_default, natural_default; - pango_layout_get_size (layout, natural, NULL); if (self->ellipsize) { @@ -1096,11 +1097,8 @@ get_static_size (GtkLabel *self, else *minimum = *natural; - get_default_widths (self, &minimum_default, &natural_default); if (minimum_default > *minimum) *minimum = minimum_default; - if (natural_default > -1) - *natural = natural_default; *natural = MAX (*minimum, *natural); } else @@ -1180,7 +1178,6 @@ get_width_for_height (GtkLabel *self, /* Natural width is natural width - or as wide as possible */ layout = gtk_label_get_measuring_layout (self, layout, natural_default); pango_layout_get_size (layout, natural_width, NULL); - *natural_width = MAX (*natural_width, natural_default); *natural_width = MAX (*natural_width, *minimum_width); } else diff --git a/testsuite/reftests/label-huge-max-width-chars.ref.ui b/testsuite/reftests/label-huge-max-width-chars.ref.ui new file mode 100644 index 0000000000..ec722f56ce --- /dev/null +++ b/testsuite/reftests/label-huge-max-width-chars.ref.ui @@ -0,0 +1,11 @@ + + + + 0 + + + Hello World + + + + diff --git a/testsuite/reftests/label-huge-max-width-chars.ui b/testsuite/reftests/label-huge-max-width-chars.ui new file mode 100644 index 0000000000..bf1237c1de --- /dev/null +++ b/testsuite/reftests/label-huge-max-width-chars.ui @@ -0,0 +1,12 @@ + + + + 0 + + + Hello World + 1000 + + + + diff --git a/testsuite/reftests/label-wrapped-huge-max-width-chars.ref.ui b/testsuite/reftests/label-wrapped-huge-max-width-chars.ref.ui new file mode 100644 index 0000000000..5ec6dea124 --- /dev/null +++ b/testsuite/reftests/label-wrapped-huge-max-width-chars.ref.ui @@ -0,0 +1,12 @@ + + + + 0 + + + Hello World + 1 + + + + diff --git a/testsuite/reftests/label-wrapped-huge-max-width-chars.ui b/testsuite/reftests/label-wrapped-huge-max-width-chars.ui new file mode 100644 index 0000000000..cc21161d61 --- /dev/null +++ b/testsuite/reftests/label-wrapped-huge-max-width-chars.ui @@ -0,0 +1,13 @@ + + + + 0 + + + Hello World + 1000 + 1 + + + + diff --git a/testsuite/reftests/meson.build b/testsuite/reftests/meson.build index 7917c1d388..d6857190cf 100644 --- a/testsuite/reftests/meson.build +++ b/testsuite/reftests/meson.build @@ -347,6 +347,8 @@ testdata = [ 'label-fonts.css', 'label-fonts.ref.ui', 'label-fonts.ui', + 'label-huge-max-width-chars.ref.ui', + 'label-huge-max-width-chars.ui', 'label-max-width-chars-and-halign-and-infinite-width.ui', 'label-max-width-chars-and-halign-and-infinite-width.ref.ui', 'label-shadows.css', @@ -365,6 +367,8 @@ testdata = [ 'label-text-shadow-changes-modify-clip.ui', 'label-width-chars-dont-shrink.ref.ui', 'label-width-chars-dont-shrink.ui', + 'label-wrapped-huge-max-width-chars.ref.ui', + 'label-wrapped-huge-max-width-chars.ui', # this seems to make assumptions on text positioning # that are not valid with subpixel positioning #'label-wrap-justify.ref.ui', -- 2.30.2